Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO
■IDEインターフェース
基礎知識
o IDEインターフェース内蔵機一覧
-----------------------------+-----------------------------------------
|機種
-----------------------------+-----------------------------------------
2.5",1.8"IDE HD内蔵(取外不可)|PC-9801NS・UR・P・NL/R・NL/A,PC-9821Ld
2.5"IDE(PC-9801NS/L専用パック) |PC-9801NS/L
2.5"IDE(98NOTE用ハードディスク |98NOTE(PC-9801N・NV・NLと上記98NOTEを除く)
パック利用可能機) |PC-9801US, PC-H98T, PC-9821初代・Ce・Ts・Es
3.5"IDE 1台まで |PC-9821Ap・As・Ae・Af・Ap2・As2・An・Cs2・Ce2・
| Cf・Cx・Cb・Xt13・Cx2・Cb2, PC-9801BA・BX
3.5"IDE 2台まで |PC-9821Ap3・As3・Bp・Bs・Be・Bf・
| Xa・Xf・Xn・Xp・Xs・Xe・Xe10・
|PC-9801BA2・BS2・BX2・BX3・BX4
3.5"IDE 4台まで |PC-9821Xa16・Xa13・Xa12・Xa10・Xa9・Xa7・Xa7e
|Xv13・Xb10
-----------------------------+-----------------------------------------
* PC-9821Cs2・Ce2・Cf・Cx・Cb・Cx2・Cb2では、CD-ROMを2台目IDEとして接続して
いる。
* ファイルベイ搭載機では、CD-ROMまたはHDDを2台目IDEとして接続可能。
o IDEハードディスクのBIOSインターフェースはSASIハードディスク互換。この
ため、IDEハードディスクを実装した本体では、PC-9801-27(SASI I/Fボード)を
使用することができない。ただし、IDEハードディスクを実装しなければ、
IDEインターフェースを内蔵した機種でもPC-9801-27は使用できる。
o IDEインターフェースを内蔵した機種では、IDEハードディスクを実装すると
拡張ROM領域のD8000〜D9FFFhにIDE BIOSが、DA000〜DBFFFhにIDE BIOSの
ワークエリアがマッピングされる。IDEハードディスクを実装しなければ、
IDE BIOSはマッピングされないので、拡張ROM領域やUMBとして利用できる。
ただし、98NOTEとPCIスロット搭載機では、IDEハードディスクを実装して
いなくてもD8000〜DBFFFhを拡張ROM領域やUMBとして利用することはでき
ない。98NOTEではこの領域にシステム制御用のBIOSが配置されているため。PCI
スロット搭載機では、PCI BIOSが配置されているため。
o IDEインターフェースの外部割り込みはINT3(INT 11h)固定。
また、PC-9800のIDEインターフェースでは、IDEドライブとのデータ転送に
DMAを使用しない。
u PC-9800では、IDEのMaster/Slaveの切り替えは使用しない。1台目と2台目の
ドライブ切り換えは、外部回路でドライブの使用するI/Oポート全体を
切り換えて行う。
o IDEインターフェースが使用するI/Oアドレスは以下の通り。
-----------+----+---+-----------------------------+--------------------
I/Oアドレス|幅 |R/W|内容 |ISAでのI/Oアドレス
-----------+----+---+-----------------------------+--------------------
0430h |BYTE|R/W|IDEドライブ切り替え |なし
0432h |BYTE|R/W|IDEドライブ切り替え |なし
0435h |BYTE|R/W|不明 |なし
0640h |WORD|R/W|Data Register |01F0h
0642h |BYTE| R |Error Register |01F1h
0642h |BYTE| W |Write Precomp Register |01F1h
0644h |BYTE|R/W|Sector Count |01F2h
0646h |BYTE|R/W|Sector Number |01F3h
0648h |BYTE|R/W|Cylinder Low |01F4h
064Ah |BYTE|R/W|Cylinder High |01F5h
064Ch |BYTE|R/W|SDH Register |01F6h
064Eh |BYTE| R |Status Register |01F7h
064Eh |BYTE| W |Command Register |01F7h
074Ch |BYTE| R |Alternate Status Register |03F6h
074Ch |BYTE| W |Digital Output Register |03F6h
074Eh |BYTE| R |Digital Input Register |03F7h
-----------+----+---+-----------------------------+--------------------
* 「ISAでのI/Oアドレス」欄は、IBM PC/AT互換機に接続されたIDEドライブが
使用するI/Oアドレス。
関連 0000:0457h
0000:055Ch
0000:0598h
0000:059Ah
0000:05B0h
0000:05B1h
0000:05E8h
0000:05ECh
D800:0000〜D800:1FFFh
DA00:0000〜DA00:1FFFh
INT 11h(外部割り込み)
INT 1Bh(IDE)
I/O 000Ah bit 1
I/O 0430h
名前 IDEバンク切り替え
Undocumented
対象 (2台接続可能な)IDE I/F搭載機
チップ IDE周辺
機能
[READ/WRITE]
bit 7〜0: 不明
00h= IDEバンク#1
01h= IDEバンク#2
解説 o 詳細不明
関連 I/O 0432h
I/O 0432h
名前 IDEバンク切り替え
Undocumented
対象 (2台接続可能な)IDE I/F搭載機
チップ IDE周辺
機能
[READ/WRITE]
bit 7〜0: バンク選択
80h= 状態読み出しのためのダミーライト([WRITE]のみ)
00h= IDEバンク#1選択
01h= IDEバンク#2選択
解説 o I/O 0640〜064Eh,074Ch,074Ehで制御するIDEバンクを選択する。
o PC-9800では、バンクの選択はこのポートに接続された外部回路が行い、
ドライブのI/Oポート全体が切り換えられる。
関連 I/O 0430h
I/O 0435h
名称 不明
Undocumented
対象 PC-9821An・Ap3・As3・Cf・Cx・Cb・Xa10・Xa9・Xa7・Cx2・Cb2・Xt13・Xe10・Xa12・Xa7e,
PC-9801BX4
機能
[READ/WRITE]
bit 7〜2: 不明
bit 1: 不明
1= IDE HDDなし
0= IDE HDDあり
bit 0: 不明
解説 o IDE HDDの有無によりbit 1が設定されるが、詳細は不明。
関連 I/O 00F0h bit 5
I/O 0640h
名前 Data Register
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ/WRITE]
bit 15〜0: データレジスタ
解説 o データ転送を行う。データレジスタの幅は16ビット。
関連
I/O 0642h
名前 Error Register,Write Precomp Register
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ] Error Register
bit 7: Bad Block Detected
1= IDフィールドにBad Blockマークが検出された
0= 通常
bit 6: Data ECC Error
1= データ領域に回復不可能ECCエラーが発生した
0= 通常
bit 5: Media Changed
1= メディアが交換された
0= メディアは交換されていない
* PC-9800は使用しない
bit 4: ID Not Found
1= IDが発見できなかった
0= 通常
bit 3: Media Change Requested
1= メディアの交換が要求されている
0= メディアの交換は要求されていない
* PC-9800は使用しない
bit 2: Aborted Command
1= コマンド実行が中断された
0= 通常
bit 1: Track0 Error
1= Restoreコマンド実行中にTrack0が検出できなかった
0= 通常
bit 0: Address Mark Not Found
1= データ領域のアドレスマークを発見できなかった
0= 通常
解説 o IDEドライブのエラー状態を取得する
[WRITE] Write Precomp Register
44h= Read/Write Longコマンド時のECC長さ7バイト
55h= Read Ahead Cache ON
AAh= Read Ahead Cache OFF
BBh= Read/Write Longコマンド時のECC長さ4バイト
解説 o IDEドライブの各種設定を行う。
関連
I/O 0644h
名前 Sector Count
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ/WRITE]
bit 7〜0: Sector Count
解説 o セクタ数を設定する。
o 00hを指定すると、256が指定されたように動作する。
関連
I/O 0646h
名前 Sector Number
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ/WRITE]
bit 7〜0: Sector Number
解説 o セクタ番号を設定する。
関連
I/O 0648h
名前 Cylinder Low
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ/WRITE]
bit 7〜0: Cylinder Low
解説 o シリンダ番号の下位8ビットを設定する。
関連 I/O 064Ah
I/O 064Ah
名前 Cylinder High
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ/WRITE]
bit 7〜0: Cylinder High
解説 o シリンダ番号の上位8ビットを設定する。
関連 I/O 0648h
I/O 064Ch
名前 SDH Register
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ/WRITE]
bit 7: 未使用(1にする)
bit 6: Binary Encoded Address Mode Select
1= Logical Block Address
0= Cylinder/Head/Sector
* PC-9800では通常0に設定する
bit 5: 未使用(1にする)
bit 4: Drive Select
* PC-9800では常に0を設定する
bit 3〜0: Head Select
解説 o ヘッド番号を指定する
u PC-9800では、LBA方式のアドレッシングは使用しない。
関連 I/O 074Eh
I/O 064Eh
名前 Status Register,Command Register
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ] Status Register
bit 7: Controller Busy
1= コントローラはBUSY状態
0= 通常
bit 6: Drive Ready
1= ドライブはREADY状態
0= 通常
bit 5: Write Fault
1= 書き込み異常が発生した
0= 通常
bit 4: Seek Complete
1= シーク動作が正常終了した
0= シーク動作が異常終了した
bit 3: Data Request
1= ドライブがデータ転送準備を完了した
0= ドライブがデータ転送準備を完了していない
bit 2: Corrected Data
1= 読み取りエラーが発生したがECCによって訂正された
0= 通常
bit 1: Index
* ディスクの1回転につき1回出力されるパルス
bit 0: Error
1= コマンド処理中に何らかのエラーが発生した
0= 通常
解説 o 各種ステータスを取得する。
[WRITE] Command Register
00h= Get drive Feature byte
1xh= Recalibrate
20h= Read(with Retries)
21h= Read(without Retries)
22h= Read Long(with Retries)
23h= Read Long(without Retries)
30h= Write(with Retries)
31h= Write(without Retries)
32h= Write Long(with Retries)
33h= Write Long(without Retries)
3Ch= Write verify
40h= Read Verify(with Retries)
41h= Read Verify(without Retries)
50h= Format Track
7xh= Seek
8xh= Vendor Unique
90h= Execute Drive Diagnostic
91h= Initialize Drive Parameters
94h= Standby Immediate
95h= Idle Immediate
96h= Standby
97h= Idle
98h= Check Power Mode
99h= Set Sleep Mode
9Ah= Vendor Unique
A0h= CD-ROMへSCSIコマンド送出
C0h= Vendor Unique
C1h= Vendor Unique
C2h= Vendor Unique
C3h= Vendor Unique
C4h= Read Multiple
C5h= Write Multiple
C6h= Set Multiple Mode
C8h= Read DMA(with Retries)
C9h= Read DMA(without Retries)
CAh= Write DMA(with Retries)
CBh= Write DMA(without Retries)
DBh= Acknowledge media change
DCh= Boot - post-boot
DDh= Boot - pre-boot
DEh= Door lock
DFh= Door unlock
E0h= Standby Immediate
E1h= Idle Immediate
E2h= Standby
E3h= Idle
E4h= Read Sector Buffer
E5h= Check Power Mode
E6h= Set Sleep Mode
E8h= Write Buffer
E9h= Write same
ECh= Identify
EFh= Set Features
Fxh= Vendor Unique
解説 o IDEドライブにコマンドを出力する。
o ドライブによっては使用できないコマンドがある。どのコマンドが
使用できるかは、Identifyコマンド等で調べる。
関連 INT 1Bh - Function D0h(IDE)
INT 1Bh - Function E0h(IDE)
INT 1Bh - Function F0h(IDE)
I/O 074Ch
名前 Alternate Status Register,Digital Output Register
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ] Alternate Status Register
解説 o 内容は、I/O 064EhのStatus Registerと同じ。ただし、
割り込み出力をクリアせず、ステータスレジスタを読み出す
ことができる。
[WRITE] Digital Output Register
bit 7〜4: 未使用(0000bにする)
bit 3: 未使用(1にする)
bit 2: Reset
1= IDEドライブをリセットする
0= 通常
bit 1: IRQ Enable
1= IDEドライブからの割り込み禁止
0= IDEドライブからの割り込み許可
bit 0: 未使用(0にする)
解説 o IDEドライブのリセット、割り込みの設定を行う。
関連 I/O 064Eh
I/O 074Eh
名前 Digital Input Register
Undocumented
対象 IDE I/F搭載機
チップ IDEドライブ
機能
[READ]
bit 7: 未使用
bit 6: Write Gate
1= 通常
0= ドライブがデータを媒体上に書き込み中
bit 5〜2: Head Select
* SDHレジスタのHead Selectの反転
bit 1,0: Drive Set1,Drive Set0
10b= シングルモード/マスタ選択
01b= スレーブ選択
解説 o IDEドライブの各種状態を読み出す。
関連 I/O 064Ch